/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sacodemel.financeiro.mb;

import com.sacodemel.financeiro.servico.IReceitasService;
import com.sacodemel.financeiro.servico.impl.ReceitasService;
import com.sacodemel.financeiro.modelo.Pessoa;
import com.sacodemel.financeiro.modelo.RegistroCaixa;
import com.sacodemel.financeiro.modelo.dto.TotalDTO;
import com.sacodemel.financeiro.util.Constantes;
import com.sacodemel.financeiro.util.JSFUtil;
import java.io.Serializable;
import java.util.List;

import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 *
 * @author X4Q1
 */
@ManagedBean
@RequestScoped
public class ReceitasMB implements Serializable {

    private DataModel listaReceitas = null;
    private List<Pessoa> listaInvestidores = null;
    private IReceitasService receitasService = new ReceitasService();
    private RegistroCaixa registroCaixa = new RegistroCaixa(new Pessoa());
    private TotalDTO total;

    /**
     * @return the listaReceitas
     */
    public DataModel getListaReceitas() {

        if (listaReceitas == null) {
            this.carregaListagem();

        }

        return listaReceitas;
    }

    public String retornaFormulario() {
        return "receitasForm";
    }

    public String preparaAlteracao() {
        this.carregaRegistroSelecionado();
        
        if (registroCaixa.getInvestidor()==null){
            registroCaixa.setInvestidor(new Pessoa());
        }

        return this.retornaFormulario();
    }
    
    public String getLucro(){
        return Constantes.ORIGEM_LUCRO;
    }
    
    public String getInvestimento(){
        return Constantes.ORIGEM_INVESTIMENTO;
    }
    

    public String salvar() {
        try {

            receitasService.salvar(registroCaixa);

            this.finalizaOperacao();
            return voltar();
        } catch (Exception ex) {
            JSFUtil.adicionaMensagemFalha();
        }

        return null;
    }

    public String excluir() {
        try {
            this.carregaRegistroSelecionado();
            receitasService.excluir(registroCaixa);
            this.finalizaOperacao();
            return voltar();
        } catch (Exception ex) {
            JSFUtil.adicionaMensagemFalha();
        }

        return null;

    }

    public String voltar() {
        return "receitas";
    }

    /**
     * @param listaReceitas the listaReceitas to set
     */
    public void setListaReceitas(DataModel listaReceitas) {
        this.listaReceitas = listaReceitas;
    }

    /**
     * @return the ivestidoresService
     */
    public IReceitasService getReceitasService() {
        return receitasService;
    }

    /**
     * @param ivestidoresService the ivestidoresService to set
     */
    public void setReceitasService(IReceitasService ReceitasService) {
        this.receitasService = ReceitasService;
    }

    
    /**
     * @return the listaInvestidores
     */
    public List<Pessoa> getListaInvestidores() throws Exception {

        if (listaInvestidores == null) {
            listaInvestidores = this.getReceitasService().obterListaInvestidores();
        }

        return listaInvestidores;
    }

    /**
     * @param listaInvestidores the listaInvestidores to set
     */
    public void setListaInvestidores(List<Pessoa> listaInvestidores) {
        this.listaInvestidores = listaInvestidores;
    }

    /**
     * @return the registroCaixa
     */
    public RegistroCaixa getRegistroCaixa() {
        return registroCaixa;
    }

    /**
     * @param registroCaixa the registroCaixa to set
     */
    public void setRegistroCaixa(RegistroCaixa registroCaixa) {
        this.registroCaixa = registroCaixa;
    }

    private void carregaListagem() {
        
        try {
            List<RegistroCaixa> lista = receitasService.obterListaReceitas();
            listaReceitas = new ListDataModel(lista);
            total = receitasService.retornarTotal(lista);
        } catch (Exception e) {
            JSFUtil.adicionaMensagemFalha(e.getMessage());
        }

    }

    private void finalizaOperacao() {
        JSFUtil.adicionaMensagemSucesso();
        registroCaixa = new RegistroCaixa(new Pessoa());
        carregaListagem();
    }

    private void carregaRegistroSelecionado() {
        registroCaixa = (RegistroCaixa) listaReceitas.getRowData();
        
    }

    /**
     * @return the total
     */
    public TotalDTO getTotal() {
        return total;
    }

    /**
     * @param total the total to set
     */
    public void setTotal(TotalDTO total) {
        this.total = total;
    }
}
